想用最短的时间分享一个最简单,却不为人熟知的知识点。话不多说,开始…

package.json 中的 “^”、“~”、“”

如果你认真观察过你的 package.json 文件的话,你一定会发现,有的依赖版本号前是 ^,有的是~,有的版本号前没有任何符号

  "devDependencies": {
    "@alifd/next": "^1.22.11",
    "@babel/plugin-proposal-decorators": "~7.13.5",
    "axios": "^0.21.1",
    "classnames": "~2.2.6",
    "moment": "2.29.1",
   }


先理解下版本号的规则: [major, minor, patch] , 分别是:大版本、小版本、补丁版本

  • ^ 表示大版本不变,小版本和补丁版本会安装最新的。举个例子:

    “@alifd/next”: “^1.22.11”,版本包括 >=1.22.11 并且 < 2.0.0

    这里有个坑,如果大版本是 0 的话,此时 “^” 和“~”的行为是一样的,因为大版本为 0 则表示此时处于开发阶段, 即使是小版本号变动,也可能带来程序的不兼容。

    “axios”: “^0.21.1”,版本包括 >=0.21.1 并且 < 0.22.0

  • ~ 表示大版本和小版本不变,补丁版本会安装最新的。举个例子:

    “@babel/plugin-proposal-decorators”: “~7.13.5”,版本包括 >=7.13.5 并且 < 7.14.0

    “classnames”: “~2.2.6”,版本包括 >=2.2.6 并且 < 2.3.0

  • 指定版本,即无 ^、~。举个例子:

    “moment”: “2.29.1”,只会安装 2.29.1 版本

package-lock.json 和 yarn.lock 是做什么的

其实看名字就能猜到大概的作用了,就是锁定安装的版本。从上面的知识点我们知道,版本号前的 “^” 和“~”会导致不同时间段安装的依赖包源码可能是不一样的,这时可能就会给我们的程序带来未知的错误,为了避免这个情况的发生,无论是使用 yarn 安装还是 npm 安装,都会给我们生成一个锁定版本的文件(即 package-lock.json 和 yarn.lock)

总结:所以当我们将代码提交至代码库的时候,千万不要把 package-lock.json 或 yarn.lock 忽略了哦